/**
 * Project: topdt-jbpm
 * Copyright 2013  Top Digital Technology  Co. Ltd.
 * All right reserved.
 */
package com.topdt.jbpm.form;

import java.util.List;
import java.util.Map;

import com.topdt.jbpm.model.Application;
import com.topdt.jbpm.model.Field;
import com.topdt.jbpm.model.Work;

/**
 * 建立日期 : 2013-5-20 下午2:28:52<br>
 * 作者 : balance<br>
 * 模块 : <br>
 * 描述 : <br>
 * 修改历史: 序号 日期 修改人 修改原因 <br>
 * 1 <br>
 * 2 <br>
 */
public interface FormHandle {

	public FormUI assemble(Map<String, Object> context);

	public Document saveForm(String workId, Document doc);

	/**
	 * @Description : 将请求参数转化为文档(业务表单对象)，如果是通用表单转换为FormInstance,
	 *              如果是自定义表单转换为自定义表单对象，由客户程序最后实现
	 * @Method_Name : convert2Doc
	 * @param parameter
	 * @return
	 * @return : Document
	 * @Creation Date : 2015年3月10日 下午6:44:55
	 * @version : v1.00
	 * @Author : calonlan
	 *
	 * @Update Date : 2015年3月10日 下午6:44:55
	 * @Update Author : calonlan
	 */
	public Document convert2Doc(Map<String, String[]> parameter);

	/**
	 * @Description : 获取文档(业务表单对象)，由客户程序最后实现
	 * @Method_Name : getDocument
	 * @param documentId
	 * @return
	 * @return : Document
	 * @Creation Date : 2015年3月10日 下午6:46:00
	 * @version : v1.00
	 * @Author : calonlan
	 *
	 * @Update Date : 2015年3月10日 下午6:46:00
	 * @Update Author : calonlan
	 */
	public Document getDocument(String documentId);

	/**
	 * @Description : 删除文档(业务表单对象)，由客户程序最后实现
	 * @Method_Name : deleteDoc
	 * @param documentId
	 * @return : void
	 * @Creation Date : 2015年3月10日 下午6:46:52
	 * @version : v1.00
	 * @Author : calonlan
	 *
	 * @Update Date : 2015年3月10日 下午6:46:52
	 * @Update Author : calonlan
	 */
	public void deleteDoc(String documentId);

	/**
	 * @Description : 其它的业务处理
	 * @Method_Name : executeBusiness
	 * @param app
	 * @param work
	 * @return : void
	 * @Creation Date : 2015年3月19日 下午3:07:56
	 * @version : v1.00
	 * @Author : calonlan
	 *
	 * @Update Date : 2015年3月19日 下午3:07:56
	 * @Update Author : calonlan
	 */
	public void executeBusiness(Application app, Work work);

	/**
	 *返回业务数据字段key集合
	 * @return
	 */
	public List<Field> getFields(Application app);

}
